.. :validated: 3.2.0

Инструкция по присоединению системы Windows к FreeIPA Realm без Active Directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

После присоединения **Windows** компьютера к домену **ALD Pro** вам станут доступны следующие функции:

* локальный вход в операционную систему **Windows** с помощью учетных записей из домена **ALD Pro** с некоторыми техническими ограничениями;
* возможность смены пароля учетной записи из домена **ALD Pro** штатными функциями операционной системы **Windows**, получение уведомлений о приближении даты истечения срока действия пароля;
* предоставление доменным пользователям прав доступа к локальным ресурсам **Windows** компьютера (через командную строку);
* синхронизация времени рабочей станции с временем на контроллерах домена;
* динамическое изменение DNS-записей в домене **ALD Pro** при изменении IP-адреса на сетевом интерфейсе **Windows** компьютера.

Требования
^^^^^^^^^^

Для присоединения **Windows** компьютера к домену **ALD Pro** (**FreeIPA**) требуется выполнить предварительную настройку сетевого интерфейса. Это может быть сделано вручную или через DHCP:

1. IP адрес – любой адрес локальной сети, из которой доступны контроллеры домена (например, 10.0.1.151);

2. Маска сети – маска локальной сети (например 255.255.255.0);

3. DNS-сервер – адрес контроллера домена (например, 10.0.1.11);

4. DNS-суффикс – полное имя домена (например, ALD.COMPANY.LAN).

.. figure:: media/pic18.png
  :name: pic_18

Настройки в домене следует производить в соответствии с рекомендациями расширенной инструкции по присоединению **Windows** компьютера к домену **ALD Pro** (FreeIPA), в которой подробно рассматриваются все детали работы этого механизма.

Присоединение к домену
^^^^^^^^^^^^^^^^^^^^^^

Для присоединения **Windows** компьютера к домену выполнить следующие действия.

1. Запустить утилиту ``aldpro-join.exe``.

2. Установить значение переключателя в положение **Является членом ... домена FreeIPA**. Переключатель может быть недоступен, если компьютер является участником домена **Active Directory**.

3. Ввести имя домена (например, ``ald.company.lan``) и нажать **ОК**.

4. В окне аутентификации ввести учетные данные доменного администратора.

Это может быть пользователь admin, но можно создать отдельную учетную запись, привилегий которой будет достаточно только для ввода машин в домен (см. **Руководство Администратора. Часть 1** → **2.2 Ввод компьютера в домен**).

5. При вводе в домен **ALD Pro** будет предложено выбрать организационное подразделение, в которое рабочая станция будет добавлена после присоединения к домену.

   В процессе присоединения компьютера к домену утилита скачивает CA-сертификат с контроллера и добавляет его в локальное корневое хранилище (``Root``)

   .. code-block:: bash

      # Скачать CA-сертификат с "https://{hostname}/ipa/config/ca.crt"
      # и сохранить в cert_file = "C:\\Windows\\Temp\\{hostname}_ca.crt"
      # Установка:
      $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 "{cert_file}"
      $store = New-Object System.Security.Cryptography.X509Certificates.X509Store(
         [System.Security.Cryptography.X509Certificates.StoreName]::Root,
         [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine
      )
      $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
      $store.Add($cert)
      $store.Close()

   .. attention::
   
      Утилита ``aldpro-join`` не осуществляет замену или обновление сертификата. Она выполняет только его первоначальную установку при вводе компьютера в домен и полное удаление всех сертификатов, подписанных ``CN=CA Signing Certificate``, при выводе компьютера из домена.

6. Перезагрузить систему.

.. figure:: media/pic19.png
  :name: pic_19

.. figure:: media/pic19-1.png
  :name: pic_19-1

Если процедура присоединения **Windows** компьютера к домену прошла успешно, появится уведомление. После перезагрузки компьютера станет доступен вход с использованием учётных данных домена.

.. figure:: media/pic20.png
  :name: pic_20

Вывод компьютера из домена
^^^^^^^^^^^^^^^^^^^^^^^^^^

Для вывода компьютера из домена выполнить следующие действия:

1. Запустить утилиту ``aldpro-join.exe``.

2. Установить значение переключателя **Является членом ... рабочей группы**.

3. Ввести имя рабочей группы (например, WORKGROUP) и нажать **ОК**.

4. В окне аутентификации ввести учетные данные доменного администратора.

5. Перезагрузить систему.

Настройка синхронизации времени
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Для корректной работы протокола аутентификации Kerberos V5 необходимо, чтобы время на клиенте и сервере отличалось не более, чем на 5 минут.

За синхронизацию времени в операционной системе **Windows** отвечает служба W32Time (Windows Time Service), по умолчанию источником точного времени выступают серверы из пула time.windows.com, синхронизация осуществляется по протоколу NTP (Network Time Protocol). Если обращение к серверам **Microsoft** недопустимо, необходимо внести изменения в настройки службы W32Time.

Параметры службы W32Time хранятся в реестре ``Computer\HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Services\W32Time\ Parameters``, прочитать и изменить параметры службы можно из командной строки с помощью утилиты ``w32tm``:

.. code-block:: bash
   
   > w32tm /query /configuration
   ...
   Type: NTP (Local)
   NtpServer: time.windows.com,0x9 (Local)
   ...

В **Active Directory** источниками точного времени для рабочих станций выступают контроллеры домена, выбор которых осуществляется с учетом иерархии домена и принадлежности рабочей станции к сайту. Для проверки настоек установить флаг ``DOMHIER``:

.. code-block:: bash

   > w32tm /config /syncfromflags:DOMHIER /update

Где:

- ``/config`` — основная команда, используемая для конфигурирования службы W32Time. С ее помощью можно, например, прочитать текущие настройки, задать список используемых серверов времени, тип синхронизации;

- ``/syncfromflags`` -- устанавливает тип источника для синхронизации времени. Допустимы значения:

   - ``MANUAL`` -- синхронизация времени с серверами из списка, заданного вручную (Type: NTP);

   - ``DOMHIER`` -- синхронизация времени с контроллерами в соответствии с иерархией домена (Type: NT5DS);

   - ``ALL`` -- разрешает использовать любой источник, как внешний сервер, так и контроллеры домена в соответствии с установленной иерархией (Type: AllSync);

   - ``NO`` -- отключает синхронизацию времени (Type: NoSync);

- ``/update`` — уведомляет службу об изменении параметров для их принудительного применения. Если параметр не использовать, то изменения вступят в силу при следующем перезапуске службы.

Указанные манипуляции не приведут к желаемому результату. Режим NT5DS не совместим с эталонными реализациями NTP. В домене **Active Directory** служба времени использует расширение протокола MS-SNTP, которое добавляет аутентифицированные подписи к пакетам NTP. Поэтому служба W32Time при запуске выполняет дополнительные проверки, и в журнале появятся предупреждения о том, что машина не является участником домена **AD**:

.. code-block:: bash

   Logging warning: NtpClient: This machine is configured to use the domain hierarchy to determine its time source, but it is not a member of a domain. NtpClient will attempt to use an alternate configured external time source if available. If an external time source is not configured or used for this computer, you may choose to disable the NtpClient.

Служба Chrony, используемая на контроллерах **ALD Pro**, не поддерживает технологию MS-SNTP, поэтому необходимо правильно настроить функцию синхронизации с внешними NTP серверами.

Самый простой способ настройки -- это указать DNS имя или IP адрес конкретных контроллеров домена. Например, если в домене только два контроллера, настроить службу W32Time можно с помощью следующей команды:

.. code-block:: bash

   > w32tm /config /syncfromflags:manual /manualpeerlist:"dc-1.ald.company.lan,0x9 dc-2.ald.company.lan,0x9" /update

Где:

- описание ключей ``/config``, ``/syncfromflags`` и ``/update`` описано выше;

- ``/manualpeerlist`` -- задает список DNS имен и/или IP адресов серверов, которые могут выступать источниками времени для синхронизации; 

   Адреса разделяются символом пробела, в конце каждого адреса через запятую может быть задан дополнительный параметр, значение которого складывается из следующих флагов:

   - 0x1 (SpecialInterval) -- указывает, что между отправкой запросов к этому серверу нужно использовать специальный интервал, заданный параметром ``SpecialPollInterval``, который по умолчанию имеет значение 32768 секунд (9 часов). Если флаг не задан, то используется стандартное значение в 604800 секунд (7 дней);

   - 0x2 (UseAsFallbackOnly) -- указывает, что данный сервер необходимо использовать в последнюю очередь как резервный;

   - 0x4 (SymmetricActive) -- указывает, что сервер является одноранговым узлом, с которым возможна симметричная синхронизация времени;

   - 0x8 (Client) -- означает, что текущий хост должен выступать клиентом по отношению к указанному серверу.

  Значение ``time.windows.com,0x9`` означает, что источник используется как клиент с особым интервалом (флаги ``Client`` и ``SpecialInterval``). Для назначения резервного источника времени применить значение ``0xB``, которое добавляет к этим флагам параметр ``UseAsFallbackOnly``.

Принудительно выполнить синхронизацию можно с помощью команды ``resync``:

.. code-block:: bash

   > w32tm /resync
 
   Sending resync command to local computer
   The command completed successfully.

Посмотреть результаты синхронизации можно с помощью команды ``status``:

.. code-block:: bash

   >w32tm /query /status /verbose
 
   Leap Indicator: 0(no warning)
   Stratum: 4 (secondary reference - syncd by (S)NTP)
   Precision: -23 (119.209ns per tick)
   Root Delay: 0.0081377s
   Root Dispersion: 7.8973731s
   ReferenceId: 0x0A00010B (source IP:  10.0.1.11)
   Last Successful Sync Time: 1/14/2024 11:32:33 AM
   Source: dc-1.ald.company.lan,0x9
   Poll Interval: 10 (1024s)
 
   Phase Offset: 0.1344197s
   ClockRate: 0.0156250s
   State Machine: 1 (Hold)
   Time Source Flags: 0 (None)
   Server Role: 0 (None)
   Last Sync Error: 0 (The command completed successfully.)
   Time since Last Good Sync Time: 2.2626619s

В большой инфраструктуре топология домена подвержена изменениям, поэтому использовать DNS-имена конкретных контроллеров домена не рекомендуется. Вместо этого желательно использовать статические A-записи в домене **FreeIPA** для всех контроллеров домена.

.. code-block:: bash

   # for server in $(ipa-replica-manage list | sed 's/: master//'); do ipa dnsrecord-add ald.company.lan @ --a-rec=$(dig +short $server); done

Вместо имени конкретных контроллеров указать DNS имя домена:

.. code-block:: bash

   > w32tm /config /syncfromflags:manual /manualpeerlist:"ald.company.lan,0x9" /update

Данный вариант не является оптимальным, так как он не учитывает сайты. Правильным способом является настройка домена с учетом географического распределения инфраструктуры.

**Настройки в домене**

Для упрощения конфигурации использовать существующую DNS-запись ``_kerberos._udp`` вместо создания отдельной записи ``_ntp._udp``.

Создать необходимые A-записи в головном офисе:

.. code-block:: bash

   $ ipa dnsrecord-add ald.company.lan _kerberos._udp.hq._locations --a-rec=10.0.1.11
 
      Имя записи: _kerberos._udp.hq._locations
      A record: 10.0.1.11
      SRV record: 0 100 88 dc-1.ald.company.lan., 0 100 88 dc-2.ald.company.lan., 0 100 88 dc-3.ald.company.lan., 50 100 88 dc-4.ald.company.lan., 50 100 88 dc-5.ald.company.lan.
 
   $ ipa dnsrecord-add ald.company.lan _kerberos._udp.hq._locations --a-rec=10.0.1.12
      
      Имя записи: _kerberos._udp.hq._locations
      A record: 10.0.1.11, 10.0.1.12
      SRV record: 0 100 88 dc-1.ald.company.lan., 0 100 88 dc-2.ald.company.lan., 0 100 88 dc-3.ald.company.lan., 50 100 88 dc-4.ald.company.lan., 50 100 88 dc-5.ald.company.lan
 
   $ ipa dnsrecord-add ald.company.lan _kerberos._udp.hq._locations --a-rec=10.0.1.13
   
      Имя записи: _kerberos._udp.hq._locations
      A record: 10.0.1.11, 10.0.1.12, 10.0.1.13
      SRV record: 0 100 88 dc-1.ald.company.lan., 0 100 88 dc-2.ald.company.lan., 0 100 88 dc-3.ald.company.lan., 50 100 88 dc-4.ald.company.lan., 50 100 88 dc-5.ald.company.lan

Создать необходимые A-записи в офисе в Санкт-Петербурге:

.. code-block:: bash

   $ ipa dnsrecord-add ald.company.lan _kerberos._udp.spb._locations --a-rec=10.0.1.14
  
      Имя записи: _kerberos._udp.spb._locations
      A record: 10.0.1.14
      SRV record: 50 100 88 dc-1.ald.company.lan., 50 100 88 dc-2.ald.company.lan., 50 100 88 dc-3.ald.company.lan., 0 100 88 dc-4.ald.company.lan., 0 100 88 dc-5.ald.company.lan
 
   $ ipa dnsrecord-add ald.company.lan _kerberos._udp.spb._locations --a-rec=10.0.1.15
  
      Имя записи: _kerberos._udp.spb._locations
      A record: 10.0.1.14, 10.0.1.15
      SRV record: 50 100 88 dc-1.ald.company.lan., 50 100 88 dc-2.ald.company.lan., 50 100 88 dc-3.ald.company.lan., 0 100 88 dc-4.ald.company.lan., 0 100 88 dc-5.ald.company.lan

Проверить работу новых записей:

.. code-block:: bash

   # nslookup -type=A _kerberos._udp.ald.company.lan dc-1.ald.company.lan
   Server:         dc-1.ald.company.lan
   Address:        10.0.1.11#53
 
   _kerberos._udp.ald.company.lan  canonical name = _kerberos._udp.hq._locations.ald.company.lan.
   Name:   _kerberos._udp.hq._locations.ald.company.lan
   Address: 10.0.1.12
   Name:   _kerberos._udp.hq._locations.ald.company.lan
   Address: 10.0.1.11
   Name:   _kerberos._udp.hq._locations.ald.company.lan
   Address: 10.0.1.13

Полученную **DNS**-запись ``_kerberos._udp.ald.company.lan`` использовать в качестве источника времени при настройке службы W32Time на компьютерах **Windows**.

**Настройки на клиенте**

На стороне **Windows** клиента установить адрес ``_kerberos._udp.ald.company.lan`` в качестве источника синхронизации времени:

.. code-block:: bash

   > w32tm /config /syncfromflags:manual /manualpeerlist:"_kerberos._udp.ald.company.lan,0x9" /update

Форсировать выполнение синхронизации:

.. code-block:: bash

   > w32tm /resync
   Sending resync command to local computer
   The command completed successfully.

Проверить статус синхронизации и убедиться в использовании требуемого сервера для синхронизации -- IP адрес 10.0.1.12 (dc-2) из пула серверов головного офиса:

.. code-block:: bash

   > w32tm /query /status /verbose
   Leap Indicator: 0(no warning)
   Stratum: 5 (secondary reference - syncd by (S)NTP)
   Precision: -23 (119.209ns per tick)
   Root Delay: 0.0088174s
   Root Dispersion: 8.3721590s
   ReferenceId: 0x0A00010C (source IP:  10.0.1.12)
   Last Successful Sync Time: 1/14/2024 12:24:43 PM
   Source: _kerberos._udp.ald.company.lan,0x9
   Poll Interval: 10 (1024s)
 
   Phase Offset: 0.6101212s
   ClockRate: 0.0156250s
   State Machine: 1 (Hold)
   Time Source Flags: 0 (None)
   Server Role: 0 (None)
   Last Sync Error: 0 (The command completed successfully.)
   Time since Last Good Sync Time: 4.6419007s

Настройка динамического обновления DNS записей
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Служба каталога FreeIPA и клиентская часть **SSSD** поддерживают функцию динамического обновления **DNS** записей в соответствии с RFC 2136, что значительно уменьшает объем ручного администрирования. Для включения этой функции на **Linux** компьютере в секцию ``domain`` файла ``sssd.conf`` добавить несколько параметров:

.. code-block:: bash

   [domain/ald.company.lan]
   ...
   dyndns_update = true
   dyndns_refresh_interval = 43200
   dyndns_update_ptr = true
   dyndns_ttl = 3600
   ...

Операционная система **Windows** поддерживает указанный протокол, но использует имя принципала в другом формате, поэтому для обеспечения работы этого механизма на сервере и клиенте необходимо внести несколько дополнительных настроек.

**Настройки в домене**

1. Добавить алиас к учетной записи компьютера

Используя созданную ранее учетную запись, **Windows** компьютер с именем ``desktop-7vkreuo`` сможет выполнять проверку аутентичности пользователей, но не сможет сам пройти аутентификацию в домене, что требуется в некоторых сценариях работы, например, для динамического обновления DNS записей. В журнале аутентификации будут появляться сообщения об ошибке ``CLIENT_NOT_FOUND``, поскольку вместо имени принципала ``host/desktop-7vkreuo``, которое используется в домене FreeIPA по умолчанию, компьютер **Windows** оперируют именем в формате ``desktop-7vkreuo$``. Устранить данную проблему можно добавлением к этой учетной записи еще одного имени принципала, так называемого псевдонима или алиаса:

.. code-block:: bash

   admin@dc-1:~$ ipa host-add-principal desktop-7vkreuo.ald.company.lan 'desktop-7vkreuo$'
   --------------------------------------------------------------------------
   Добавлены новые псевдонимы в запись узла "desktop-7vkreuo.ald.company.lan"
   --------------------------------------------------------------------------
   Имя узла: desktop-7vkreuo.ald.company.lan
   Псевдоним учётной записи: host/desktop-7vkreuo.ald.company.lan@ALD.COMPANY.LAN, desktop-7vkreuo$@ALD.COMPANY.LAN

Дополнительное имя принципала не обязательно брать в одинарные кавычки, потому что символ ``$`` стоит в конце строки и не будет воспринят интерпретатором командной строки как начало имени переменной. Если же указывать имя полностью, включая реалм домена, например, ``desktop-7vkreuo$@ALD.COMPANY.LAN``, то одинарные кавычки будут обязательны.

2. Настроить политику обновления DNS

Служба разрешения имен BIND9 запрещает анонимное обновление DNS записей, а компьютеры **Windows** оперируют именами в формате ``desktop-7vkreuo$``, поэтому для работы механизма в настройках DNS зон требуется расширить политики обновления записей:

Для прямой зоны:

.. code-block:: bash

   DN: idnsname=ald.company.lan.,cn=dns,dc=ald,dc=company,dc=lan.

   Атрибут: idnsUpdatePolicy

   Старое значение: grant ALD.COMPANY.LAN krb5-self * A; grant ALD.COMPANY.LAN krb5-self * AAAA; grant ALD.COMPANY.LAN krb5-self * SSHFP;

   Новое значение: grant ALD.COMPANY.LAN krb5-self * A AAAA SSHFP; grant ALD.COMPANY.LAN ms-self . A AAAA;

Для обратной зоны:

.. code-block:: bash

   DN: idnsname=10.0.1.in-addr.arpa.,cn=dns,dc=ald,dc=company,dc=lan.

   Атрибут: idnsUpdatePolicy

   Старое значение: grant ALD.COMPANY.LAN krb5-subdomain 1.0.10.in-addr.arpa. PTR;

   Новое значение: grant ALD.COMPANY.LAN krb5-subdomain 1.0.10.in-addr.arpa. PTR; grant ALD.COMPANY.LAN ms-subdomain 1.0.10.in-addr.arpa. PTR;

Внести указанные изменения можно через интерфейс IPA https://dc-1.ald.company.lan/ipa/ui.

.. figure:: media/pic21.png
  :name: pic_21

**Настройки на клиенте**

1. Настроить политику обновления DNS.

При динамическом обновлении DNS записей **Windows** клиенты по умолчанию сначала выполняют попытку неавторизованного запроса, которая отклоняется BIND9 сервером, и только затем переключаются на GSS-TSIG, поэтому в журналах DNS сервера появляется много лишних предупреждений. Для уменьшения количества ошибок в журналах сервера на стороне рабочей станции **Windows** включить только безопасные обновления с помощью локальной групповой политики. 

.. figure:: media/pic22.png
  :name: pic_22

Открыть редактор локальной групповой политики (``gpedit.msc``), и настроить уровень безопасности обновления (**Update security level**), выбрать только безопасные обновления (**only secure**).

2. Проверить работу механизма.

**Windows** компьютеры автоматически обновляют DNS записи, полагаясь на полное имя компьютера, которое формируется путем добавления основного DNS-суффикса к имени компьютера. Чтобы определить имя компьютера и основной DNS-суффикс, выполнить команду ``ipconfig`` с ключом ``all``:

.. code-block:: bash

   > ipconfig /all
 
   Windows IP Configuration
 
      Host Name . . . . . . . . . . . . : DESKTOP-7VKREUO
      Primary Dns Suffix  . . . . . . . : ALD.COMPANY.LAN
      Node Type . . . . . . . . . . . . : Hybrid
      IP Routing Enabled. . . . . . . . : No
      WINS Proxy Enabled. . . . . . . . : No
      DNS Suffix Search List. . . . . . : ALD.COMPANY.LAN
   ...

Запросы на обновление DNS-записей могут быть отправлены по одному из следующих событий:

- включение компьютера;

- изменение IP-адреса в конфигурации сетевого подключения;

- продление срока аренды IP-адреса, выданного DHCP-сервером. Такое событие возникает при запуске компьютера или использовании команды ``ipconfig /renew``;

- принудительное обновление регистрации DNS командой ``ipconfig /registerdns``.

На стороне сервера запросы на обновление DNS можно будет найти в журнале ``daemon.log``, если установить хосту IP адрес 10.0.1.155:

.. code-block:: bash

   # tail -f /var/log/daemon.log | grep -i 'desktop-7vkreuo'
   dc-1 named-pkcs11[4920]: client @0x70a05410f640 10.0.1.155#64080/key
   desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone 'ald.company.lan/IN':
   deleting rrset at 'DESKTOP-7VKREUO.ALD.COMPANY.LAN' AAAA
 
   dc-1 named-pkcs11[4920]: client @0x70a05410f640 10.0.1.155#64080/key
   desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone 'ald.company.lan/IN':
   deleting rrset at 'DESKTOP-7VKREUO.ALD.COMPANY.LAN' A
 
   dc-1 named-pkcs11[4920]: client @0x70a05410f640 10.0.1.155#64080/key
   desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone 'ald.company.lan/IN':
   adding an RR at 'DESKTOP-7VKREUO.ALD.COMPANY.LAN' A 10.0.1.155
 
   dc-1 named-pkcs11[4920]: client @0x70a04411a9d0 10.0.1.155#56472/key
   desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone '1.0.10.in-addr.arpa/IN':
   deleting rrset at '155.1.0.10.in-addr.arpa' PTR
 
   dc-1 named-pkcs11[4920]: client @0x70a04411a9d0 10.0.1.155#56472/key
   desktop-7vkreuo\$\@ALD.COMPANY.LAN: updating zone '1.0.10.in-addr.arpa/IN':
   adding an RR at '155.1.0.10.in-addr.arpa' PTR DESKTOP-7VKREUO.ALD.COMPANY.LAN.

На стороне клиента возможные ошибки обновления DNS будут появляться в журнале ``System``.

.. figure:: media/pic23.png
  :name: pic_23

Назначение доменным пользователям прав доступа в локальной системе
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Доменные пользователи работают в операционной системе под своими учетными записями. Однако управление их правами доступа через стандартный графический интерфейс (окно поиска пользователей) невозможно, поскольку доменные учётные записи в нем не отображаются.

Для предоставления прав доступа доменным пользователям или группам необходимо использовать командную строку и назначать права напрямую через идентификатор безопасности (SID).

В домене **ALD Pro** (FreeIPA) все пользователи и группы автоматически получают SID в формате **Windows**. Для просмотра идентификаторов безопасности требуется использовать утилиту командной строки ``ipa``.

.. code-block:: bash

   $ ipa user-show admin --all | grep ipantsecurityidentifier
  ipantsecurityidentifier: S-1-5-21-1491017894-2377586105-2170988794-500
 
   $ ipa group-show admins --all | grep ipantsecurityidentifier
  ipantsecurityidentifier: S-1-5-21-1491017894-2377586105-2170988794-512

Выполнение команды ``ICACLS`` приведет к ошибке:

.. code-block:: bash

   > mkdir "C:\Private Folder"
 
   > ICACLS "C:\Private Folder" /grant "*S-1-5-21-1491017894-2377586105-2170988794-500:(OI)(CI)rxm"
   *S-1-5-21-1491017894-2377586105-2170988794-500: No mapping between account names and security IDs was done.
   Successfully processed 0 files; Failed processing 1 files

Для корректного выполнения команды ``ICACLS`` требуется предварительно выполнить интерактивный вход в систему под учётной записью этого пользователя, например, через окно терминала.

.. code-block:: bash

   > runas /user:admin@ALD.COMPANY.LAN "C:\Windows\System32\cmd.exe"
   Enter the password for admin@ALD.COMPANY.LAN:
   Attempting to start C:\Windows\System32\cmd.exe as user "admin@ALD.COMPANY.LAN" ...
 
   > ICACLS "C:\Private Folder" /grant "*S-1-5-21-1491017894-2377586105-2170988794-500:(OI)(CI)rxm"
   processed file: C:\Private Folder
   Successfully processed 1 files; Failed processing 0 files

До перезагрузки компьютера на вкладке безопасности в свойствах папки будет отображаться имя пользователя, а не просто его идентификатор.

.. figure:: media/pic24.png
  :name: pic_24

Предложенное решение имеет ограничение – для назначения прав доступа требуется знать пароль учетной записи. Поэтому более универсальным способом является создание локальных групп.

Для возможности предоставления прав доступа на локальном компьютере доменному пользователю Admin и группе Admins создать вспомогательные локальные группы **ALD-User-Admin** и **ALD-Group-Admins**:

.. code-block:: bash

   > New-LocalGroup -Name "ALD-User-Admin" -Description "Domain user"
 
   Name           Description
   ----           -----------
   ALD-User-Admin Domain user
 
   > Add-LocalGroupMember -Group "ALD-User-Admin" -Member "S-1-5-21-1491017894-2377586105-2170988794-500"
 
   > New-LocalGroup -Name "ALD-Group-Admins" -Description "Domain group"
 
   Name             Description
   ----             -----------
   ALD-Group-Admins Domain group
 
   > Add-LocalGroupMember -Group "ALD-Group-Admins" -Member "S-1-5-21-1491017894-2377586105-2170988794-512"
